/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 项目名：	rumba
 * 文件名：	HButton.java
 * 模块说明：	
 * 修改历史：
 * Aug 28, 2007 - lxm - 创建。
 */
package com.hd123.rumba.jsp.table;

/**
 * 提供表格单元格编辑器中使用的按钮。
 * 
 * @author lxm
 * 
 */
public abstract class HButton {

  /**
   * 构造函数。
   * 
   * @param params
   *          其它参数数组。可用的参数说明参见相应的属性说明。
   */
  public HButton(Object[] params) {
    super();

    for (int i = 0; i < params.length;) {
      String paramName = (String) params[i++];
      Object paramValue = params[i++];
      this.readParam(paramName, paramValue);
    }
  }

  private HEditor editor;
  private String imgUrl;
  private String hint;
  private String onExecuteJS;

  /** 属性：所属编辑器。 */
  public HEditor getEditor() {
    return editor;
  }

  void setEditor(HEditor editor) {
    this.editor = editor;
  }

  /**
   * 读取参数。
   * <p>
   * 
   * 开放给派生类以重写，用于新增加参数的解析。
   * 
   * @param paramName
   *          指定参数名。
   * @param paramValue
   *          指定参数取值。
   * @return 是否被成功解释。
   */
  protected boolean readParam(String paramName, Object paramValue) {
    if ("imgUrl".equals(paramName)) {
      this.imgUrl = (String) paramValue;
      return true;
    }
    if ("hint".equals(paramName)) {
      this.hint = (String) paramValue;
      return true;
    }
    if ("onExecuteJS".equals(paramName)) {
      this.onExecuteJS = (String) paramValue;
      return true;
    }
    return false;
  }

  /**
   * 提示信息。null表示不提示。<br>
   * 对应参数名"hint"，下一个参数为取值，类型为String。<br>
   */
  public String getHint() {
    return hint;
  }

  public void setHint(String hint) {
    this.hint = hint;
  }

  /**
   * 指定显示图片的访问路径及文件名。<br>
   * 对应参数名"imgUrl"，下一个参数为取值，类型为String。<br>
   */
  public String getImgUrl() {
    return imgUrl;
  }

  public void setImgUrl(String imgUrl) {
    this.imgUrl = imgUrl;
  }

  /**
   * 属性：当操作者按下按钮，需要执行命令时被触发。<br>
   * 对应参数名"onExecuteJS"，下一个参数为取值，类型为String。<br>
   * 
   * <br>
   * 通常情况下这应该指向一个javascript的函数名，该函数将在事件发生时被触发。具体说明如下（以下说明为js语法）：<br>
   * 
   * <br>
   * <code>function (row, record)</code><br>
   * 参数：
   * <dl>
   * <dd>RTable.Row row - 当前表格行对象。
   * <dd>RDataset.Record record - 当前数据记录。
   * </dl>
   */
  public String getOnExecuteJS() {
    return onExecuteJS;
  }

  public void setOnExecuteJS(String onExecuteJS) {
    this.onExecuteJS = onExecuteJS;
  }

  /**
   * 取得对应的Javascript中的类名。
   * 
   * @return
   */
  public abstract String getClassNameJS();

  /**
   * 构造Javascript语句，配置参数部分。
   * 
   * @return
   */
  public String buildConfigJS() {
    StringBuffer sb = new StringBuffer();
    if (this.onExecuteJS != null && !"".equals(this.onExecuteJS.trim()))
      sb.append("onExecute: " + this.onExecuteJS);
    return sb.toString();
  }
}
